A host computer system may run multiple virtual machines (VMs) that share common resources such as physical storage. Physical storage used by the VMs typically is emulated so as to present virtual storage resources to the VMs. A virtualization intermediary manages interaction between VMs and physical storage. Some prior virtualization intermediaries “trap” (intercept) virtual storage requests issued by individual VMs and redirect the requests from virtual targets to physical targets. Such earlier virtualization intermediary uses trap handlers during emulation to redirect IO commands to prevent storage access violations. However, this emulation can be expensive in terms of instructions processed. Overall performance may decline when many VMs seek to access physical storage at the same time. The many storage requests can result in data access delays due to the compute cycles required by the virtualization intermediary to trap and translate simultaneous data requests from many VMs.
One solution to this problem has been proposed in the Single Root Virtualization I/O and Sharing Specification, Revision 1.0, Sep. 11, 2007 (PCI-SIG SR-IOV) specification. The PCI-SIG SR-IOV specification, which proposes providing each of one or more VMs with direct access to physical storage through its own storage adapter instance as a designated virtual function (VF) running on a physical storage adapter so as to avoid the need for heavy intervention by the virtualization intermediary to gain access to physical storage.
Unfortunately, direct access that bypasses the virtualization intermediary can result in loss of virtualization intermediary resident storage IO features such as virtual disk based provisioning.